import axios from 'axios'
// import Qs from 'qs'
import router from '@/router/index'
import store from '@/store/index'
import { Message } from 'element-ui'

const toLogin = () => {
    router.push({
        path: '/login',
        query: {
            redirect: router.currentRoute.fullPath
        }
    })
}

const api = axios.create({
    // 决定使用哪个文件的Axios的baseURL，文件在根目录下的 .env开头的文件
    baseURL: process.env.VUE_APP_API_ROOT,
    timeout: 10000,
    responseType: 'json'
    // withCredentials: true
})

// 请求的拦截器（客户端发送数据给服务器的形式就是“请求”： 客户端（前端）----->服务端）
api.interceptors.request.use(
    request => {
        if (request.method == 'post') {
            console.log('请求方式为post')
            if (request.data instanceof FormData) {
                console.log('表单提交')
                if (store.getters['user/isLogin']) {
                    // 如果是 FormData 类型（上传图片）
                    request.data.append('token', store.state.user.token)
                    console.log('一3')
                }
            } else {
                // 带上 token
                if (request.data == undefined) {
                    request.data = {}
                    console.log('（post）请求数据不明确')
                }
                if (store.getters['user/isLogin']) {
                    request.data.token = store.state.user.token
                    console.log('已向请求数据携带token')
                }
                // request.data = Qs.stringify(request.data)
            }
        } else {
            console.log('请求方式为get')
            // 带上 token
            if (request.params == undefined) {
                request.params = {}
                console.log('（get）请求参数不明确')
            }
            if (store.getters['user/isLogin']) {
                request.params.token = store.state.user.token
                console.log('已向请求数据携带token')
            }
        }
        console.log('请求通过，放行请求')
        // 放行请求
        return request

    }
)

// 响应的拦截器（服务器发送数据给客户端的形式就是“响应”： 服务端----->客户端（前端））
api.interceptors.response.use(
    response => {
        if (response.data.error != '') {
            console.log('响应出错')
            // 如果接口请求时发现 token 失效，则立马跳转到登录页
            if (response.data.status == 0) {
                // 删除用户信息、token、失效时间
                localStorage.removeItem('account')
                localStorage.removeItem('token')
                localStorage.removeItem('failure_time')
                store.state.user.account = ''
                store.state.user.token = ''
                store.state.user.failure_time = ''
                toLogin()
                console.log('token失效，已清除用户数据并跳转登录页')
                return false
            }
            // 将错误信息用弹框提示出来
            Message.error(response.data.error)
            return Promise.reject(response.data)
        }
        console.log('响应通过，放行响应')
        return Promise.resolve(response.data)
    },
    error => {
        console.log('响应失败')
        return Promise.reject(error)
    }
)

export default api
